"""用户接口层"""

import hmac

from lib import common
from db import db_handler

logger = common.get_logger('user')


def register_interface(username, password, balance=10000):
    """注册功能接口

    注册成功，返回True和成功提示信息
    注册失败，返回False和失败提示信息
    """
    # 判断用户名是否已经注册
    if db_handler.select(username):
        prompt_msg = f'用户[{username}]已经存在，请重新设置用户名！'
        logger.debug(prompt_msg)
        return False, prompt_msg
    # 初始化用户数据并序列化到文件中
    encrypted_pwd, salt = common.encrypted_password(password)
    userdata = {
        'username': username,
        'password': encrypted_pwd,
        'balance': balance,
        'salt': salt,
        'flow': [],
        'shopping_cart': {},
        'locked': False,
    }
    db_handler.save(userdata)
    prompt_msg = f'用户[{username}]注册成功。'
    logger.info(prompt_msg)
    return True, prompt_msg


def login_interface(username, password):
    """登录功能接口

    登录成功，返回True和成功提示信息
    登录失败，返回False和失败提示信息
    """
    userdata = db_handler.select(username)
    # 校验用户是否存在
    if not userdata:
        prompt_msg = f'用户[{username}]不存在！'
        logger.debug(prompt_msg)
        return False, prompt_msg
    # 校验用户是否被锁定
    elif userdata.get('locked'):
        prompt_msg = f'用户[{username}]已经被锁定！'
        logger.debug(prompt_msg)
        return False, prompt_msg
    # 校验用户密码是否正确
    db_password = userdata.get('password')
    salt = userdata.get('salt')
    md5_obj = hmac.new(salt.encode('utf-8'), digestmod='md5')
    md5_obj.update(password.encode('utf-8'))
    inp_password = md5_obj.hexdigest()
    if inp_password == db_password:
        prompt_msg = f'用户[{username}]登录成功。'
        logger.info(prompt_msg)
        return True, prompt_msg
    else:
        prompt_msg = f'用户[{username}]密码输入错误！'
        logger.debug(prompt_msg)
        return False, prompt_msg
